package cn.iocoder.yudao.module.xiaoBizHandler.convert.codegen;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.xiaoBizHandler.controller.admin.codegen.vo.XiaoBizHandlerCodegenDetailRespVO;
import cn.iocoder.yudao.module.xiaoBizHandler.controller.admin.codegen.vo.XiaoBizHandlerCodegenPreviewRespVO;
import cn.iocoder.yudao.module.xiaoBizHandler.controller.admin.codegen.vo.XiaoBizHandlerCodegenUpdateReqVO;
import cn.iocoder.yudao.module.xiaoBizHandler.controller.admin.codegen.vo.column.XiaoBizHandlerCodegenColumnRespVO;
import cn.iocoder.yudao.module.xiaoBizHandler.controller.admin.codegen.vo.table.XiaoBizHandlerCodegenTableRespVO;
import cn.iocoder.yudao.module.xiaoBizHandler.controller.admin.codegen.vo.table.XiaoBizHandlerSchemaTableRespVO;
import cn.iocoder.yudao.module.xiaoBizHandler.dal.dataobject.codegen.XiaoBizHandlerCodegenColumnDO;
import cn.iocoder.yudao.module.xiaoBizHandler.dal.dataobject.codegen.XiaoBizHandlerCodegenTableDO;
import cn.iocoder.yudao.module.xiaoBizHandler.dal.dataobject.codegen.XiaoBizHandlerSchemaColumnDO;
import cn.iocoder.yudao.module.xiaoBizHandler.dal.dataobject.codegen.XiaoBizHandlerSchemaTableDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Mapper
public interface XiaoBizHandlerCodegenConvert {

    XiaoBizHandlerCodegenConvert INSTANCE = Mappers.getMapper(XiaoBizHandlerCodegenConvert.class);

    // ========== InformationSchemaTableDO 和 InformationSchemaColumnDO 相关 ==========

    XiaoBizHandlerCodegenTableDO convert(XiaoBizHandlerSchemaTableDO bean);

    List<XiaoBizHandlerCodegenColumnDO> convertList(List<XiaoBizHandlerSchemaColumnDO> list);

    XiaoBizHandlerCodegenTableRespVO convert(XiaoBizHandlerSchemaColumnDO bean);

    // ========== XiaoBizHandlerCodegenTableDO 相关 ==========

//    List<XiaoBizHandlerCodegenTableRespVO> convertList02(List<XiaoBizHandlerCodegenTableDO> list);

    XiaoBizHandlerCodegenTableRespVO convert(XiaoBizHandlerCodegenTableDO bean);

    PageResult<XiaoBizHandlerCodegenTableRespVO> convertPage(PageResult<XiaoBizHandlerCodegenTableDO> page);

    // ========== XiaoBizHandlerCodegenTableDO 相关 ==========

    List<XiaoBizHandlerCodegenColumnRespVO> convertList02(List<XiaoBizHandlerCodegenColumnDO> list);

    XiaoBizHandlerCodegenTableDO convert(XiaoBizHandlerCodegenUpdateReqVO.Table bean);

    List<XiaoBizHandlerCodegenColumnDO> convertList03(List<XiaoBizHandlerCodegenUpdateReqVO.Column> columns);

    List<XiaoBizHandlerSchemaTableRespVO> convertList04(List<XiaoBizHandlerSchemaTableDO> list);

    // ========== 其它 ==========

    default XiaoBizHandlerCodegenDetailRespVO convert(XiaoBizHandlerCodegenTableDO table, List<XiaoBizHandlerCodegenColumnDO> columns) {
        XiaoBizHandlerCodegenDetailRespVO respVO = new XiaoBizHandlerCodegenDetailRespVO();
        respVO.setTable(convert(table));
        respVO.setColumns(convertList02(columns));
        return respVO;
    }

    default List<XiaoBizHandlerCodegenPreviewRespVO> convert(Map<String, String> codes) {
        return codes.entrySet().stream().map(entry -> {
            XiaoBizHandlerCodegenPreviewRespVO respVO = new XiaoBizHandlerCodegenPreviewRespVO();
            respVO.setFilePath(entry.getKey());
            respVO.setCode(entry.getValue());
            return respVO;
        }).collect(Collectors.toList());
    }

}
